package com.fmboy.MXH.nav.utils;

import lombok.extern.slf4j.Slf4j;

/**
 * UserContext 工具类用于存储和获取当前线程中的用户信息。
 */
@Slf4j
public final class UserContext {

    private static final ThreadLocal<Long> USER_ID_HOLDER = ThreadLocal.withInitial(() -> null);

    // 禁止实例化该工具类
    private UserContext() {
        throw new UnsupportedOperationException("Utility class should not be instantiated");
    }

    /**
     * 获取当前登录用户的ID。
     *
     * @return 用户ID或null（如果没有设置）
     */
    public static Long getUserId() {
        Long userId = USER_ID_HOLDER.get();
        if (userId == null) {
            log.warn("尝试获取用户 ID，但未设置任何 ID。");
        }
        return userId;
    }

    /**
     * 设置当前线程的用户ID。
     *
     * @param userId 用户ID
     */
    public static void setUserId(Long userId) {
        if (userId == null) {
            log.warn("将 User ID 设置为 null。");
        } else {
            log.debug("设置 user ID: {}", userId);
        }
        USER_ID_HOLDER.set(userId);
    }

    /**
     * 移除当前线程中的用户ID。
     */
    public static void removeUserId() {
        log.debug("从线程本地存储中删除用户 ID。");
        USER_ID_HOLDER.remove();
    }
}